import axios from 'axios'
import { Message } from 'element-ui'
// 导入vuex实例
import store from '@/store'
// 导入路由实例
import router from '@/router'
// import { getToken } from '@/utils/auth'

const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API // url = base url + request url
})

// 请求拦截器==》发送请求前执行
service.interceptors.request.use(
  config => {
    // config是请求配置项，其中包含headers
    if (store.getters.token) {
      // 场景：统一添加请求头=》把token加入到请求中
      config.headers.Authorization = `Bearer ${store.getters.token}`
    }
    return config
  },
  error => {
    // do something with request error
    // console.log(error) // for debug
    return Promise.reject(error)
  }
)

// response interceptor
// 响应拦截器 ==》请求相应了执行
service.interceptors.response.use(
  response => {
    // console.log('后台返回的数据', response.data)
    const { success, message, data } = response.data
    if (success) {
      return data
    } else {
      Message.error(message)
      return Promise.reject(message)
    }
  },
  error => {
    // console.log('err' + error) // for debug
    console.dir(error)
    // token失效处理
    // 1.判断请求的状态码
    // 2.删除token和用户信息
    // 3.跳回登录页
    if (error.request.status === 401) {
      store.dispatch('user/logoutAction')
      // 报错提示
      Message.error(error.response.data.message)
      // replace和push跳转页面，但是reolace替换当前页面跳转  replace不能回退

      // 需求：满足用户登录成功之后，跳回上次访问的页面
      // 携带用户正在访问页面的path地址=》怎么获取？ =》router.currentRoute.path
      router.replace(`/login?backUrl=${router.currentRoute.path}`)
    }
    return Promise.reject(error)
  }
)

export default service
